您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. from abc import ABC
  2. from openai import OpenAI
  3. import os
  4. import base64
  5. from io import BytesIO
  6. class Base(ABC):
  7. def describe(self, image, max_tokens=300):
  8. raise NotImplementedError("Please implement encode method!")
  9. class GptV4(Base):
  10. def __init__(self):
  11. import openapi
  12. openapi.api_key = os.environ["OPENAPI_KEY"]
  13. self.client = OpenAI()
  14. def describe(self, image, max_tokens=300):
  15. buffered = BytesIO()
  16. try:
  17. image.save(buffered, format="JPEG")
  18. except Exception as e:
  19. image.save(buffered, format="PNG")
  20. b64 = base64.b64encode(buffered.getvalue()).decode("utf-8")
  21. res = self.client.chat.completions.create(
  22. model="gpt-4-vision-preview",
  23. messages=[
  24. {
  25. "role": "user",
  26. "content": [
  27. {
  28. "type": "text",
  29. "text": "请用中文详细描述一下图中的内容,比如时间,地点,人物,事情,人物心情等。",
  30. },
  31. {
  32. "type": "image_url",
  33. "image_url": {
  34. "url": f"data:image/jpeg;base64,{b64}"
  35. },
  36. },
  37. ],
  38. }
  39. ],
  40. max_tokens=max_tokens,
  41. )
  42. return res.choices[0].message.content.strip()
  43. class QWen(Base):
  44. def chat(self, system, history, gen_conf):
  45. from http import HTTPStatus
  46. from dashscope import Generation
  47. from dashscope.api_entities.dashscope_response import Role
  48. # export DASHSCOPE_API_KEY=YOUR_DASHSCOPE_API_KEY
  49. response = Generation.call(
  50. Generation.Models.qwen_turbo,
  51. messages=messages,
  52. result_format='message'
  53. )
  54. if response.status_code == HTTPStatus.OK:
  55. return response.output.choices[0]['message']['content']
  56. return response.message